package com.example.contactos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Agenda implements Serializable {
	
	private static Agenda AGENDA = null;
	
	private ArrayList<Pessoa> contactos;

	private Agenda() {
		this.contactos = new ArrayList<Pessoa>();
	}
	
	public static Agenda getInstance() {
		if (Agenda.AGENDA == null) {
			Agenda.AGENDA = new Agenda();
		}
		
		return Agenda.AGENDA;
	}

	public void adicionar(Pessoa contacto) {
		contactos.add(contacto);
	}

	public ArrayList<Pessoa> pesquisar(String textoAPesquisar) {
		ArrayList<Pessoa> novaLista = new ArrayList<Pessoa>();
		
		for (Pessoa p: contactos){
			if(p.getNome().toUpperCase().contains(textoAPesquisar.toUpperCase()))
				novaLista.add(p);
		}
		
		return novaLista;
	}
	
	public Pessoa pesquisar(Pessoa pessoaAPesquisar) {
		
		for (Pessoa p: contactos){
			if(p.equals(pessoaAPesquisar)) {
				return p;
			}
		}
		
		return null;
	}

	public ArrayList<Pessoa> getContactos() {
		return contactos;
	}
	

	public boolean remover(Pessoa pessoa) {
		return contactos.remove(pessoa);
		
	}

	@Override
	public String toString() {
		String res = "";

		for (Pessoa contacto : contactos) {
			res += contacto + "\n";
		}

		return res;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((contactos == null) ? 0 : contactos.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Agenda other = (Agenda) obj;
		if (contactos == null) {
			if (other.contactos != null)
				return false;
		} else if (!contactos.equals(other.contactos))
			return false;
		return true;
	}

	public void clear() {
		contactos.clear();
	}



}
